#!/usr/bin/python3
# -*- coding: utf-8 -*-
# @Time    : 2023/7/4 23:04
# @Author  : BadMan
# @FileName: 03 列表生成器.py

"""
    列表生成式
"""
"""
    range():生成一个整数序列,左闭右开
    range(stop) 
    range(start,stop)
    range(start,stop,step)
stop: 指定生成的整数序列终止的值（不包含在序列中）。
start: 可选参数，指定生成的整数序列的起始值。如果省略了 start 参数，则默认从 0 开始。
step: 可选参数，指定生成的整数序列的步长(两个相邻的整数之间的差值）。如果省略了 step 参数，
    则默认步长为 1。
"""

# 1. 生成一个List[1,2,3,4,5,6,7,8,9,10]
ret = list(range(1,10))
print(ret)

# 2. [1x1, 2x2, 3x3, ..., 10x10]
L = []
for i in range(1,11):
    L.append(i*i)
print(L)

# 3. 上面的方法太过于繁琐，而列表生成式则可以用一行语言代替循环生成上面的list：
L = [x*x for x in range(1,11)]
print(L)

# 两层训练生成全排列
L = [m+n for m in 'abc' for n in 'xht']
print(L)

import os
# 运用列表生成式，可以写出非常简洁的代码。
# 例如，列出当前目录下的所有文件和目录名，
# 可以通过一行代码实现：
L = [d for d in os.listdir('.')]  # os.listdir可以列出文件和目录
print(L)
"""
    请修改列表生成式，通过添加if语句保证列表生成式能正确地执行：
"""
L1 = ['Hello', 'World', 18, 'Apple', None]
L2 = [x for x in L1]
if L1 == L2:
    print('ok')
else:
    print('no')
